//导入token 工具文件 并解构方法
const {verifyToken} = require('../utils/tokenUtils');

//导入状态码文件
const {RES_CODE} = require('../utils/constants');

//导出中间件函数
module.exports = function(req,res,next){
    // console.log("verifytoken中间件");

    // 验证token ？ token 在哪？ - 存储在客户端 - 浏览器；是在服务生成的，但存在浏览器上
    // localstorage

    //token 需要发送请求时携带过来，如果没有token，就说明你没有权限访问我的接口。
    //后端规定了，你的token必须在req请求对象中，请求头位置。 
    //获取请求头token - 自定义请求头
    let token = req.headers.token;

    // 单独处理预检请求 - 预设请求的请求方式 - OPTIONS
    if(req.method === 'OPTIONS'){
        next();
        return;
    }

    //请求头中是否含有token
    if(token){
        verifyToken(token).then(val=>{
            //获取到的token内存储的数据
            console.log(val);// { userID:...}

            //可以在任何路由得到用户id
            req.userID = val.userID;

            next();
        },rea=>{
            //token验证失败执行
            // console.log(rea);

            //需要请求权限才能访问
            res.statusCode = 401;

            res.json({
                code:RES_CODE.DATA_ERROR,
                message:"token非法或过期"
            })

        });
    }else{
        //需要请求权限才能访问
        res.statusCode = 401;
        res.json({
            code:RES_CODE.DATA_ERROR,
            message:"没有token"
        })
    }
}
